///*
// * Copyright 2015-2017 the original author or authors.
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// *
// *      http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// */
//
//package com.thread.threadfirst.marvel.zuul;
//
//import com.google.common.collect.Lists;
//import org.apache.commons.lang3.StringEscapeUtils;
//
//import javax.servlet.http.HttpServletRequest;
//import java.io.UnsupportedEncodingException;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
///**
// * 字符串工具类, 继承org.apache.commons.lang3.StringUtils类
// */
//public class StringUtils extends org.apache.commons.lang3.StringUtils {
//
//    private static final char SEPARATOR = '_';
//    private static final String CHARSET_NAME = "UTF-8";
//
//
//    /**
//     * 姓名脱敏
//     * 只显示第一个汉字，其他隐藏为2个星号<例子：李**>
//     *
//     * @param fullName
//     * @param  index 1 为第index位
//     * @return
//     */
//    public static String blurFullName(String fullName,int index) {
//        if (StringUtils.isBlank(fullName)) {
//            return "匿名用户";
//        }
//        String name = StringUtils.left(fullName, index);
//        return StringUtils.rightPad(name, StringUtils.length(fullName), "*");
//    }
//
//    /**
//     * 转换为字节数组
//     *
//     * @param str
//     * @return
//     */
//    public static byte[] getBytes(String str) {
//        if (str != null) {
//            try {
//                return str.getBytes(CHARSET_NAME);
//            } catch (UnsupportedEncodingException e) {
//                return null;
//            }
//        } else {
//            return null;
//        }
//    }
//
//    /**
//     * 转换为字节数组
//     *
//     * @param str
//     * @return
//     */
//    public static String toString(byte[] bytes) {
//        try {
//            return new String(bytes, CHARSET_NAME);
//        } catch (UnsupportedEncodingException e) {
//            return EMPTY;
//        }
//    }
//
//    /**
//     * 是否包含字符串
//     *
//     * @param str  验证字符串
//     * @param strs 字符串组
//     * @return 包含返回true
//     */
//    public static boolean inString(String str, String... strs) {
//        if (str != null) {
//            for (String s : strs) {
//                if (str.equals(trim(s))) {
//                    return true;
//                }
//            }
//        }
//        return false;
//    }
//
//    /**
//     * 替换掉HTML标签方法
//     */
//    public static String replaceHtml(String html) {
//        if (isBlank(html)) {
//            return "";
//        }
//        String regEx = "<.+?>";
//        Pattern p = Pattern.compile(regEx);
//        Matcher m = p.matcher(html);
//        String s = m.replaceAll("");
//        return s;
//    }
//
//    /**
//     * 替换为手机识别的HTML，去掉样式及属性，保留回车。
//     *
//     * @param html
//     * @return
//     */
//    public static String replaceMobileHtml(String html) {
//        if (html == null) {
//            return "";
//        }
//        return html.replaceAll("<([a-z]+?)\\s+?.*?>", "<$1>");
//    }
//
//    /**
//     * 缩略字符串（不区分中英文字符）
//     *
//     * @param str    目标字符串
//     * @param length 截取长度
//     * @return
//     */
//    public static String abbr(String str, int length) {
//        if (str == null) {
//            return "";
//        }
//        try {
//            StringBuilder sb = new StringBuilder();
//            int currentLength = 0;
//            for (char c : replaceHtml(StringEscapeUtils.unescapeHtml4(str)).toCharArray()) {
//                currentLength += String.valueOf(c).getBytes("GBK").length;
//                if (currentLength <= length - 3) {
//                    sb.append(c);
//                } else {
//                    sb.append("...");
//                    break;
//                }
//            }
//            return sb.toString();
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//        }
//        return "";
//    }
//
//    public static String abbr2(String param, int length) {
//        if (param == null) {
//            return "";
//        }
//        StringBuffer result = new StringBuffer();
//        int n = 0;
//        char temp;
//        boolean isCode = false; // 是不是HTML代码
//        boolean isHTML = false; // 是不是HTML特殊字符,如&nbsp;
//        for (int i = 0; i < param.length(); i++) {
//            temp = param.charAt(i);
//            if (temp == '<') {
//                isCode = true;
//            } else if (temp == '&') {
//                isHTML = true;
//            } else if (temp == '>' && isCode) {
//                n = n - 1;
//                isCode = false;
//            } else if (temp == ';' && isHTML) {
//                isHTML = false;
//            }
//            try {
//                if (!isCode && !isHTML) {
//                    n += String.valueOf(temp).getBytes("GBK").length;
//                }
//            } catch (UnsupportedEncodingException e) {
//                e.printStackTrace();
//            }
//
//            if (n <= length - 3) {
//                result.append(temp);
//            } else {
//                result.append("...");
//                break;
//            }
//        }
//        // 取出截取字符串中的HTML标记
//        String temp_result = result.toString().replaceAll("(>)[^<>]*(<?)", "$1$2");
//        // 去掉不需要结素标记的HTML标记
//        temp_result = temp_result.replaceAll("</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>", "");
//        // 去掉成对的HTML标记
//        temp_result = temp_result.replaceAll("<([a-zA-Z]+)[^<>]*>(.*?)</\\1>", "$2");
//        // 用正则表达式取出标记
//        Pattern p = Pattern.compile("<([a-zA-Z]+)[^<>]*>");
//        Matcher m = p.matcher(temp_result);
//        List<String> endHTML = Lists.newArrayList();
//        while (m.find()) {
//            endHTML.add(m.group(1));
//        }
//        // 补全不成对的HTML标记
//        for (int i = endHTML.size() - 1; i >= 0; i--) {
//            result.append("</");
//            result.append(endHTML.get(i));
//            result.append(">");
//        }
//        return result.toString();
//    }
//
//    /**
//     * 转换为Double类型
//     */
//    public static Double toDouble(Object val) {
//        if (val == null) {
//            return 0D;
//        }
//        try {
//            return Double.valueOf(trim(val.toString()));
//        } catch (Exception e) {
//            return 0D;
//        }
//    }
//
//    /**
//     * 转换为Float类型
//     */
//    public static Float toFloat(Object val) {
//        return toDouble(val).floatValue();
//    }
//
//    /**
//     * 转换为Long类型
//     */
//    public static Long toLong(Object val) {
//        return toDouble(val).longValue();
//    }
//
//    /**
//     * 转换为Integer类型
//     */
//    public static Integer toInteger(Object val) {
//        return toLong(val).intValue();
//    }
//
//    /**
//     * 获得用户远程地址
//     */
//    public static String getRemoteAddr(HttpServletRequest request) {
//        String remoteAddr = request.getHeader("X-Real-IP");
//        if (isNotBlank(remoteAddr)) {
//            remoteAddr = request.getHeader("X-Forwarded-For");
//        } else if (isNotBlank(remoteAddr)) {
//            remoteAddr = request.getHeader("Proxy-Client-IP");
//        } else if (isNotBlank(remoteAddr)) {
//            remoteAddr = request.getHeader("WL-Proxy-Client-IP");
//        }
//        return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
//    }
//
//    /**
//     * 驼峰命名法工具
//     *
//     * @return toCamelCase(" hello_world ") == "helloWorld"
//     * toCapitalizeCamelCase("hello_world") == "HelloWorld"
//     * toUnderScoreCase("helloWorld") = "hello_world"
//     */
//    public static String toCamelCase(String s) {
//        if (s == null) {
//            return null;
//        }
//
//        s = s.toLowerCase();
//
//        StringBuilder sb = new StringBuilder(s.length());
//        boolean upperCase = false;
//        for (int i = 0; i < s.length(); i++) {
//            char c = s.charAt(i);
//
//            if (c == SEPARATOR) {
//                upperCase = true;
//            } else if (upperCase) {
//                sb.append(Character.toUpperCase(c));
//                upperCase = false;
//            } else {
//                sb.append(c);
//            }
//        }
//
//        return sb.toString();
//    }
//
//    /**
//     * 驼峰命名法工具
//     *
//     * @return toCamelCase(" hello_world ") == "helloWorld"
//     * toCapitalizeCamelCase("hello_world") == "HelloWorld"
//     * toUnderScoreCase("helloWorld") = "hello_world"
//     */
//    public static String toCapitalizeCamelCase(String s) {
//        if (s == null) {
//            return null;
//        }
//        s = toCamelCase(s);
//        return s.substring(0, 1).toUpperCase() + s.substring(1);
//    }
//
//    /**
//     * 驼峰命名法工具
//     *
//     * @return toCamelCase(" hello_world ") == "helloWorld"
//     * toCapitalizeCamelCase("hello_world") == "HelloWorld"
//     * toUnderScoreCase("helloWorld") = "hello_world"
//     */
//    public static String toUnderScoreCase(String s) {
//        if (s == null) {
//            return null;
//        }
//
//        StringBuilder sb = new StringBuilder();
//        boolean upperCase = false;
//        for (int i = 0; i < s.length(); i++) {
//            char c = s.charAt(i);
//
//            boolean nextUpperCase = true;
//
//            if (i < (s.length() - 1)) {
//                nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
//            }
//
//            if ((i > 0) && Character.isUpperCase(c)) {
//                if (!upperCase || !nextUpperCase) {
//                    sb.append(SEPARATOR);
//                }
//                upperCase = true;
//            } else {
//                upperCase = false;
//            }
//
//            sb.append(Character.toLowerCase(c));
//        }
//
//        return sb.toString();
//    }
//
//    /**
//     * 如果不为空，则设置值
//     *
//     * @param target
//     * @param source
//     */
//    public static void setValueIfNotBlank(String target, String source) {
//        if (isNotBlank(source)) {
//            target = source;
//        }
//    }
//
//    /**
//     * 转换为JS获取对象值，生成三目运算返回结果
//     *
//     * @param objectString 对象串
//     *                     例如：row.user.id
//     *                     返回：!row?'':!row.user?'':!row.user.id?'':row.user.id
//     */
//    public static String jsGetVal(String objectString) {
//        StringBuilder result = new StringBuilder();
//        StringBuilder val = new StringBuilder();
//        String[] vals = split(objectString, ".");
//        for (int i = 0; i < vals.length; i++) {
//            val.append("." + vals[i]);
//            result.append("!" + (val.substring(1)) + "?'':");
//        }
//        result.append(val.substring(1));
//        return result.toString();
//    }
//
//    /**
//     * 通过正则表达式获取内容
//     *
//     * @param regex 正则表达式
//     * @param from  原字符串
//     * @return
//     */
//    public static String[] regex(String regex, String from) {
//        Pattern pattern = Pattern.compile(regex);
//        Matcher matcher = pattern.matcher(from);
//        List<String> results = new ArrayList<String>();
//        while (matcher.find()) {
//            for (int i = 0; i < matcher.groupCount(); i++) {
//                results.add(matcher.group(i + 1));
//            }
//        }
//        return results.toArray(new String[]{});
//    }
//
//}
